把服務部屬到主機後,如何讓服務保持執行,甚至在主機重開機後都會自動執行呢?通常我們會用 pm2 來管理 server 上的 Node.js 服務。
pm2 的 pm 是 Process Manager 的意思。通常在本機開發的時候,我會使用 nodemon 來測試服務,讓它保持長開、存檔時自動重啟;而在主機上,我會使用 pm2 來管理服務,因為它可以設定服務要不要自動重啟、要不要在存檔時自動重啟、甚至做到開機自動啟動。
我們一樣使用 上次部屬 的 koa-api-example 來測試。
首先是,當你的主機上服務一多的時候,零散的放會很難管理,所以通常會找一個資料夾統一放這些服務。至於怎麼放其實沒有硬性規定,你要通通放 ~
資料夾也可以,只是亂了點。由於 Nginx 預設把 HTML 的東西放在 /var/www/html
下,例如我們可能會有個 /var/www/html/wordpress
專案,所以我習慣把 Node.js 的服務都放在 /var/www/node
下,那我們就先搬移這個專案吧:
# 首先建立這個資料夾
sudo mkdir -p /var/www/node
# 接著搬移我們的專案
sudo mv ~/koa-api-example /var/www/node/.
第一步先安裝 pm2:
npm install --global pm2
接著啟動我們的服務:
cd /var/www/node/koa-api-example
pm2 start --name koa-api-example server.js
我們使用 pm2 start
來啟動一個服務,透過 --name
來幫服務取個名字,不然 App name 叫做 server
的話太難辨識了。
如果需要有變更時自動重啟的話,可以加入 --watch
選項。
假設你加了好幾個服務的話,可以使用 pm2 list
或 pm2 ls
來查看這個列表。
由於這是在 server 上管理,為了避免我們不小心重開機,或是 server 異常斷電重開後服務沒有跟著開起來,我們應該確保 pm2 可以在開機時自動重開,並執行我們設定的這些服務。
首先執行 pm2 startup
指令,設定開機自動啟動 pm2。
如果提示
To setup the Startup Script, copy/paste the following command:
,記得把那行指令複製貼上執行一次。
接著執行 pm2 save
指令,讓 pm2 記得我們設定了這些服務,下次啟動 pm2 的時候要自動執行這些東西。
本篇文章同步發表在 Noob's Space。